// 存储所有在线用户的连接
const onlineUsers = new Map() // userId -> socket

module.exports = (io) => {
  // 监听新连接
  io.on('connection', (socket) => {
    console.log('新客户端连接，ID:', socket.id)
    // 用户登录/认证后，将连接与用户ID关联
    socket.on('auth', (data) => {
      const { userId, username, role } = data
      if (userId) {
        // 存储用户连接
        onlineUsers.set(userId, socket)
        // 将用户加入对应角色的房间，便于按角色广播消息
        socket.join(`role:${role}`)
        console.log(`用户 ${username || userId} (${role}) 已认证`)
        // 通知所有管理员有新用户上线（仅发送给admin角色）
        io.to('role:admin').emit('user:status', {
          userId,
          username,
          status: 'online',
          timestamp: new Date(),
        })
      }
    })

    // 处理用户断开连接
    socket.on('disconnect', () => {
      // 查找并移除断开的用户
      for (const [userId, userSocket] of onlineUsers.entries()) {
        if (userSocket.id === socket.id) {
          onlineUsers.delete(userId)
          console.log(`用户 ${userId} 已断开连接`)
          // 通知所有管理员有用户下线
          io.to('role:admin').emit('user:status', {
            userId: userId,
            status: 'offline',
            timestamp: new Date(),
          })
          break
        }
      }
    })
  })

  // 暴露API以供其他模块使用
  return {
    // 强制用户下线
    forceLogout: (userId) => {
      const userSocket = onlineUsers.get(userId)
      if (userSocket) {
        // 通知用户被强制下线
        userSocket.emit('force:logout', {
          message: '您的账号已被管理员强制下线',
        })
        // 断开连接
        userSocket.disconnect(true)
        return true
      }
      return false
    },

    // 广播用户状态变更
    broadcastUserStatusChange: (userId, status, username) => {
      io.to('role:admin').emit('user:status:change', {
        userId,
        username,
        status,
        timestamp: new Date(),
      })
    },

    // 广播系统通知
    broadcastSystemNotice: (message, toRoles = null) => {
      if (toRoles) {
        // 发送给特定角色
        if (Array.isArray(toRoles)) {
          toRoles.forEach((role) => {
            io.to(`role:${role}`).emit('system:notice', { message })
          })
        } else {
          io.to(`role:${toRoles}`).emit('system:notice', { message })
        }
      } else {
        // 发送给所有用户
        io.emit('system:notice', { message })
      }
    },
  }
}
